using System;
using System.Collections.Generic;
using System.Text;

namespace IWMAG.Scripting.Compiler {
    public class TokenMapping : Dictionary<string, Token> {

        public TokenMapping() : base() {
            Add("continue", Token.Continue);

            Add("foreach", Token.Foreach);

            Add("import", Token.Import);
            Add("return", Token.Return);
            Add("extern", Token.Extern);

            Add("alias", Token.Alias);
            Add("break", Token.Break);
            Add("const", Token.Const);
            Add("string", Token.StringType);
            Add("while", Token.While);
            Add("value", Token.Value);
            Add("false", Token.False);
            Add("async", Token.Async);
            Add("begin", Token.Begin);

            Add("wait", Token.Wait);
            Add("true", Token.True);
            Add("else", Token.Else);
            Add("bool", Token.BoolType);
            Add("void", Token.VoidType);
            Add("real", Token.RealType);
            Add("sync", Token.Sync);

            Add("new", Token.New);
            Add("log", Token.Log);
            Add("int", Token.IntType);
            Add("var", Token.Var);
            Add("for", Token.For);

            Add("do", Token.Do);
            Add("if", Token.If);

            Add("++", Token.Inc);
            Add("--", Token.Dec);
            Add("=>", Token.LateBind);
            Add("==", Token.Eq);
            Add(">=", Token.Geq);
            Add("<=", Token.Leq);
            Add("<<", Token.LShift);
            Add(">>", Token.RShift);
            Add("!=", Token.Neq);
            Add("&&", Token.BoolAnd);
            Add("||", Token.BoolOr);
            Add("[]", Token.Array);
            Add("..", Token.Range);

            Add("(", Token.LParen);
            Add(")", Token.RParen);
            Add("[", Token.LBracket);
            Add("]", Token.RBracket);
            Add("{", Token.LBrace);
            Add("}", Token.RBrace);
            Add(";", Token.EOS);
            Add("+", Token.Add);
            Add("-", Token.Sub);
            Add("*", Token.Mul);
            Add("/", Token.Div);
            Add("%", Token.Mod);
            Add("=", Token.Assign);
            Add(">", Token.Gt);
            Add("<", Token.Lt);
            Add(".", Token.Dot);
            Add("?", Token.TernStart);
            Add(":", Token.TernEnd);
            Add("&", Token.BitAnd);
            Add("|", Token.BitOr);
            Add("^", Token.BitXor);
            Add("~", Token.BitNot);
            Add("!", Token.Not);
            Add(",", Token.Comma);
        }
    }
}